Set Up The Map
This part is admittedly a little complicated, mostly because I added
options to get the map to look exactly the way that I wanted.
Itβs not necessary to understand the code here. But I learned a lot
from: https://plotly.com/r/#maps.
# a very basic map could be created with:
library(plotly)
plot_geo()
mymap <- plot_geo() %>%
layout(title = "Demonstration Map",
geo = list(showland = TRUE,
landcolor = toRGB("grey"),
showcountries = TRUE,
showocean=FALSE,
oceancolor="LightBlue",
lataxis = list(showgrid = TRUE,
gridcolor = toRGB("black")),
lonaxis = list(showgrid = TRUE,
gridcolor = toRGB("black"))))
Map Projections
Globe
mymap %>%
layout(geo = list(projection = list(type = 'orthographic')))
Mercator
Perpendicular latitude and longitude. Can be helpful in some kinds of
navigation, but areas are distorted, especially as one approaches the
poles.
mymap %>%
layout(geo=list(projection = list(type = 'mercator')))
Mollweide
An equal area projection.
mymap %>%
layout(geo=list(projection = list(type = 'mollweide')))
Robinson
An attempt to compromise between equal areas and a natural looking
map.
mymap %>%
layout(geo=list(projection = list(type = 'robinson')))
LS0tDQp0aXRsZTogIk1hcCBQcm9qZWN0aW9ucyINCmF1dGhvcjogIkFuZHkgR3JvZ2FuLUtheWxvciINCmRhdGU6ICJgciBTeXMuRGF0ZSgpYCINCm91dHB1dDogDQogIGh0bWxfZG9jdW1lbnQ6IA0KICAgIGNvZGVfZG93bmxvYWQ6IHllcw0KICAgIGNvZGVfZm9sZGluZzogaGlkZQ0KICAgIGNzczogVU0uY3NzDQogICAgaGlnaGxpZ2h0OiBoYWRkb2NrDQogICAgbnVtYmVyX3NlY3Rpb25zOiB5ZXMNCiAgICB0b2M6IHllcw0KICAgIHRvY19mbG9hdDoNCiAgICAgIGNvbGxhcHNlZDogbm8NCiAgICAgIHNtb290aF9zY3JvbGw6IHllcw0KICBkaXN0aWxsOjpkaXN0aWxsX2FydGljbGU6DQogICAgaGlnaGxpZ2h0OiBoYWRkb2NrDQogICAgdG9jOiB5ZXMNCiAgICBjb2RlX2ZvbGRpbmc6IGhpZGUNCi0tLQ0KDQpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRX0NCg0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBUUlVFLA0KICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmcgPSBGQUxTRSwNCiAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlID0gRkFMU0UpDQoNCmBgYA0KDQojIFNldCBVcCBUaGUgTWFwDQoNCj4gVGhpcyBwYXJ0IGlzIGFkbWl0dGVkbHkgYSBsaXR0bGUgY29tcGxpY2F0ZWQsIG1vc3RseSBiZWNhdXNlIEkgYWRkZWQgb3B0aW9ucyB0byBnZXQgdGhlIG1hcCB0byBsb29rIGV4YWN0bHkgdGhlIHdheSB0aGF0IEkgd2FudGVkLiANCg0KPiBJdCdzIG5vdCBuZWNlc3NhcnkgdG8gdW5kZXJzdGFuZCB0aGUgY29kZSBoZXJlLiBCdXQgSSBsZWFybmVkIGEgbG90IGZyb206IFtodHRwczovL3Bsb3RseS5jb20vci8jbWFwc10oaHR0cHM6Ly9wbG90bHkuY29tL3IvI21hcHMpLg0KDQpgYGB7cn0NCg0KbGlicmFyeShwbG90bHkpDQoNCmBgYA0KDQpgYGB7ciwgZWNobz1UUlVFLCBldmFsPUZBTFNFfQ0KDQojIGEgdmVyeSBiYXNpYyBtYXAgY291bGQgYmUgY3JlYXRlZCB3aXRoOiANCg0KbGlicmFyeShwbG90bHkpDQoNCnBsb3RfZ2VvKCkNCg0KYGBgDQoNCg0KYGBge3J9DQoNCm15bWFwIDwtIHBsb3RfZ2VvKCkgJT4lDQogIGxheW91dCh0aXRsZSA9ICJEZW1vbnN0cmF0aW9uIE1hcCIsIA0KICAgICAgICAgZ2VvID0gbGlzdChzaG93bGFuZCA9IFRSVUUsICANCiAgICAgICAgICAgICAgICAgICAgbGFuZGNvbG9yID0gdG9SR0IoImdyZXkiKSwNCiAgICAgICAgICAgICAgICAgICAgc2hvd2NvdW50cmllcyA9IFRSVUUsDQogICAgICAgICAgICAgICAgICAgIHNob3dvY2Vhbj1GQUxTRSwgDQogICAgICAgICAgICAgICAgICAgIG9jZWFuY29sb3I9IkxpZ2h0Qmx1ZSIsDQogICAgICAgICAgICAgICAgICAgIGxhdGF4aXMgPSBsaXN0KHNob3dncmlkID0gVFJVRSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JpZGNvbG9yID0gdG9SR0IoImJsYWNrIikpLA0KICAgICAgICAgICAgICAgICAgICBsb25heGlzID0gbGlzdChzaG93Z3JpZCA9IFRSVUUsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyaWRjb2xvciA9IHRvUkdCKCJibGFjayIpKSkpIA0KDQpgYGANCg0KIyBNYXAgUHJvamVjdGlvbnMNCg0KIyMgR2xvYmUNCg0KYGBge3J9DQoNCm15bWFwICU+JSANCiAgbGF5b3V0KGdlbyA9IGxpc3QocHJvamVjdGlvbiA9IGxpc3QodHlwZSA9ICdvcnRob2dyYXBoaWMnKSkpDQoNCmBgYA0KDQojIyBNZXJjYXRvciANCg0KPiBQZXJwZW5kaWN1bGFyIGxhdGl0dWRlIGFuZCBsb25naXR1ZGUuIENhbiBiZSBoZWxwZnVsIGluIHNvbWUga2luZHMgb2YgbmF2aWdhdGlvbiwgYnV0IGFyZWFzIGFyZSBkaXN0b3J0ZWQsIGVzcGVjaWFsbHkgYXMgb25lIGFwcHJvYWNoZXMgdGhlIHBvbGVzLg0KDQpgYGB7cn0NCg0KbXltYXAgJT4lIA0KICBsYXlvdXQoZ2VvPWxpc3QocHJvamVjdGlvbiA9IGxpc3QodHlwZSA9ICdtZXJjYXRvcicpKSkNCg0KYGBgDQoNCiMjIE1vbGx3ZWlkZQ0KDQo+IEFuICplcXVhbCBhcmVhKiBwcm9qZWN0aW9uLg0KDQpgYGB7cn0NCg0KbXltYXAgJT4lIA0KICBsYXlvdXQoZ2VvPWxpc3QocHJvamVjdGlvbiA9IGxpc3QodHlwZSA9ICdtb2xsd2VpZGUnKSkpDQoNCmBgYA0KDQojIyBSb2JpbnNvbg0KDQo+IEFuIGF0dGVtcHQgdG8gY29tcHJvbWlzZSBiZXR3ZWVuIGVxdWFsIGFyZWFzIGFuZCBhIG5hdHVyYWwgbG9va2luZyBtYXAuDQoNCmBgYHtyfQ0KDQpteW1hcCAlPiUgDQogIGxheW91dChnZW89bGlzdChwcm9qZWN0aW9uID0gbGlzdCh0eXBlID0gJ3JvYmluc29uJykpKQ0KDQpgYGANCg0KDQo=